package com.ruoyi.weiriya.service.impl;

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.weiriya.domain.WMemberChargeRecord;
import com.ruoyi.weiriya.domain.WSocketTwo;
import com.ruoyi.weiriya.domain.enums.ReceiveTypeEnum;
import com.ruoyi.weiriya.mapper.WSocketTwoMapper;
import com.ruoyi.weiriya.service.IWMemberChargeRecordService;
import com.ruoyi.weiriya.service.IWSocketTwoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.concurrent.TimeUnit;

/**
 * 插座信息Service业务层处理
 * 
 * @author ruoyi
 * @date 2023-08-16
 */
@Slf4j
@Service
public class WSocketTwoServiceImpl extends ServiceImpl<WSocketTwoMapper, WSocketTwo> implements IWSocketTwoService
{

    /** 控制节点(开启/关闭) */
    private final String WRITE_NODE = "http://open-api.power.powerliber.com/2/cmd/write-node";
    /** 按功率控制节点(开启/关闭) */
    private final String WRITE_NODE_WITH_POWER = "http://open-api.power.powerliber.com/2/cmd/write-node-with-power";
    /** 配置节点最大充电功率 */
    private final String SET_NODE_CONFIG = "http://open-api.power.powerliber.com/2/cmd/set-node-config";
    /** 获取节点最大充电功率 */
    private final String GET_NODE_CONFIG = "http://open-api.power.powerliber.com/2/cmd/get-node-config";
    /** 下发NFC刷卡充电控制指令 */
    private final String CONTROL_NFC_CHARGE = "http://open-api.power.powerliber.com/2/cmd/control-nfc-charge";
    /** 余额播报 */
    private final String WRITE_CARD_QUERY_RESPONSE = "http://open-api.power.powerliber.com/2/cmd/write-card-query-response";
    /** 设置系统参数 */
    private final String SET_SYS_NODE_CONFIG = "http://open-api.power.powerliber.com/3/cmd/set-node-config";
    /** 读取系统参数 */
    private final String GET_SYS_NODE_CONFIG = "http://open-api.power.powerliber.com/3/cmd/get-node-config";

    private final String SOCKET_TWO_KEY = "SOCKET_TWO_KEY";

    @Autowired
    private IWMemberChargeRecordService memberChargeRecordService;

    @Autowired
    private RedisCache redisCache;


    @Override
    public String openOrCloseSocket(String firmId, String portIndex, int type) {
        // 获取插座信息
        WSocketTwo socketTwo = this.getOne(new LambdaQueryWrapper<WSocketTwo>()
                .eq(WSocketTwo::getFirmId, firmId));
        if(StringUtils.isNull(socketTwo)){
            socketTwo = getBySuid(firmId);

            if(StringUtils.isNull(socketTwo)) {
                throw new ServiceException("插座不存在！");
            }
            this.save(socketTwo);
        }
        //Json请求参数
        String param = "{\n" +
                "\"gateway_id\":\"" + socketTwo.getGatewayId() + "\",\n" +
                "\"node_index\":" + socketTwo.getNodeIndex() + ",\n" +
                "\"port_index\": " + portIndex + ",\n" +
                "\"switch_state\": " + type + ",\n" +
                "\"charge_mode\": 1,\n" +
                "\"charge_time\": 900,\n" +
                "\"charge_energy\": 0,\n" +
                "\"timeout\": 5\n" +
                "}";
        try {
            String result = HttpUtil.sendPostReq(WRITE_NODE, param, "utf-8", 0, RuoYiConfig.getAccessKey(), null);

            JSONObject jsonResult = JSONObject.parseObject(result);
            JSONObject data = jsonResult.getJSONObject("data");

            Integer dataResult = data.getInteger("result");
            if(dataResult == 0){
                return null;
            }
            return data.getString("transaction_id");

        } catch (Exception e) {
            e.printStackTrace ( );
        }
        return null;
    }

    public Map socketTwologin() {
        Object object = redisCache.getCacheObject(this.SOCKET_TWO_KEY);
        if(StringUtils.isNull(object)) {
            String url2 = "http://api.power.powerliber.com/operator/1/operator/login";

            String socketTwoUsername = RuoYiConfig.getSocketTwoUsername();
            String socketTwoPassword = RuoYiConfig.getSocketTwoPassword();

            String param = "username=" + socketTwoUsername +
                    "&password=" + socketTwoPassword;
            try {
                Map<String, String> map = new HashMap<>();
                String result2 = HttpUtil.sendPostReq(url2, param, "utf-8", 1, null, null);
                JSONObject jsonResult = JSONObject.parseObject(result2);
                JSONObject data = jsonResult.getJSONObject("data");
                String token = data.getString("token");
                JSONObject user = data.getJSONObject("user");
                String id = user.getString("id");

                map.put("token", token);
                map.put("id", id);
                redisCache.setCacheObject(this.SOCKET_TWO_KEY, map, 25, TimeUnit.MINUTES);
                return map;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return (Map)object;
    }

    @Override
    public WSocketTwo getBySuid(String suid) {
        String url2 = "http://api.power.powerliber.com/operator/1/device/list-params";

        try {
            Map map = socketTwologin();
            String param = "token=" + map.get("token") +
                    "&page=1" +
                    "&operator_id=" + map.get("id") +
                    "&suid=" + suid;

            String result2 = HttpUtil.sendPostReq (url2, param, "utf-8",1, null, null);
            JSONObject jsonResult = JSONObject.parseObject(result2);
            JSONObject data = jsonResult.getJSONObject("data");
            Integer count = data.getInteger("count");
            if(StringUtils.isNull(count) || count < 1){
                return null;
            }

            JSONArray jsonArray = data.getJSONArray("list");

            JSONObject jsonObject = jsonArray.getJSONObject(0);

            WSocketTwo wSocketTwo = new WSocketTwo();
            wSocketTwo.setGatewayId(jsonObject.getString("plug_gateway_uid"));
            wSocketTwo.setFirmId(jsonObject.getString("suid"));
            wSocketTwo.setNodeIndex(jsonObject.getInteger("node_index"));
            wSocketTwo.setPlugId(jsonObject.getString("uid"));
            wSocketTwo.setStationId(jsonObject.getString("station_id"));
            wSocketTwo.setOriginalId(jsonObject.getString("id"));
            return wSocketTwo;
        } catch (Exception e) {
            e.printStackTrace ( );
        }
        return null;
    }

    @Override
    public Map getStatusBySuid(String suid) {

        // 获取插座信息
        WSocketTwo socketTwo = this.getOne(new LambdaQueryWrapper<WSocketTwo>()
                .eq(WSocketTwo::getFirmId, suid));
        if(StringUtils.isNull(socketTwo)){
            // 数据初始化
            socketTwo = this.getBySuid(suid);
            this.save(socketTwo);
            if(StringUtils.isNull(socketTwo)) {
                throw new ServiceException("插座不存在！");
            }
        } else if(StringUtils.isEmpty(socketTwo.getOriginalId())){
            // 未绑定原始ID
            WSocketTwo bySuid = this.getBySuid(suid);
            socketTwo.setOriginalId(bySuid.getOriginalId());
            this.updateById(socketTwo);
        }
        // 获取插座充电状态
        String url2 = "http://api.power.powerliber.com/operator/1/device/port-list";
        try {
            Map map = socketTwologin();
            String param = "token=" + map.get("token") +
                    "&device_id=" + socketTwo.getOriginalId();

            String result2 = HttpUtil.sendPostReq (url2, param, "utf-8",1, null, null);
            JSONObject jsonResult = JSONObject.parseObject(result2);
            JSONObject data = jsonResult.getJSONObject("data");
            JSONArray list = data.getJSONArray("list");
            Map<String, Integer> hashMap = new HashMap<>();
            for (int i = 0; i < list.size(); i++) {
                JSONObject jsonObject = list.getJSONObject(i);
                if(jsonObject.getInteger("online") == 0){
                    throw new ServiceException("设备已离线，请更换设备！");
                }
                Integer chargeStatus = jsonObject.getInteger("charge_status");
                Integer portIndex = jsonObject.getInteger("port_index");
                hashMap.put("portIndex", portIndex);
                hashMap.put("chargeStatus", chargeStatus);
            }
            return hashMap;
        } catch (Exception e) {
            e.printStackTrace ( );
            throw new ServiceException("设备已离线，请更换设备！");
        }
    }

    @Override
    public void initAll() {
        String url2 = "http://api.power.powerliber.com/operator/1/device/list-params";

        try {
            int page = 1;
            ArrayList<WSocketTwo> list = new ArrayList<>();
            ArrayList<String> idList = new ArrayList<>();
            idList.addAll(Arrays.asList(arr));
            while (true){
                String param = "token=fbf3db2e5f4813f317fe9277e8ba6c4c" +
                        "&page=" + page +
                        "&operator_id=11690" +
                        "&org_id=" +
                        "&station_id=" +
                        "&uid=" +
                        "&suid=" +
                        "&gateway_id=" +
                        "&is_off=-1" +
                        "&type=" +
                        "&sort=1";

                String result2 = HttpUtil.sendPostReq (url2, param, "utf-8",1, null, null);
                JSONObject jsonResult = JSONObject.parseObject(result2);
                JSONObject data = jsonResult.getJSONObject("data");
                Integer count = data.getInteger("count");
                if(null == count){
                    break;
                }
                int pageNum =  count / 20;
                if(pageNum < page){
                    break;
                } else if(pageNum > page){
                    JSONArray jsonArray = data.getJSONArray("list");
                    for (int i = 0; i < 20; i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);

                        if(idList.contains(jsonObject.getString("uid"))) {
                            continue;
                        }
                        idList.add(jsonObject.getString("uid"));

                        WSocketTwo wSocketTwo = new WSocketTwo();
                        wSocketTwo.setGatewayId(jsonObject.getString("plug_gateway_uid"));
                        wSocketTwo.setFirmId(jsonObject.getString("suid"));
                        wSocketTwo.setNodeIndex(jsonObject.getInteger("node_index"));
                        wSocketTwo.setPlugId(jsonObject.getString("uid"));
                        wSocketTwo.setStationId(jsonObject.getString("station_id"));

                        list.add(wSocketTwo);

                        System.out.println("数量：" + idList.size());
                        System.out.println("页码：" + page);
                    }
                } else {
                    JSONArray jsonArray = data.getJSONArray("list");

                    int j =  count % 20;

                    for (int i = 0; i < j; i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);

                        if(idList.contains(jsonObject.getString("uid"))) {
                            continue;
                        }
                        idList.add(jsonObject.getString("uid"));

                        WSocketTwo wSocketTwo = new WSocketTwo();
                        wSocketTwo.setGatewayId(jsonObject.getString("plug_gateway_uid"));
                        wSocketTwo.setFirmId(jsonObject.getString("suid"));
                        wSocketTwo.setNodeIndex(jsonObject.getInteger("node_index"));
                        wSocketTwo.setPlugId(jsonObject.getString("uid"));
                        wSocketTwo.setStationId(jsonObject.getString("station_id"));

                        list.add(wSocketTwo);
                    }
                }
                page++;
            }

            String param = "token=fbf3db2e5f4813f317fe9277e8ba6c4c" +
                    "&page=" + 1 +
                    "&operator_id=11690" +
                    "&org_id=" +
                    "&station_id=" +
                    "&uid=" +
                    "&suid=" +
                    "&gateway_id=" +
                    "&is_off=-1" +
                    "&type=" +
                    "&sort=1";

            String result2 = HttpUtil.sendPostReq (url2, param, "utf-8",1, null, null);
            JSONObject jsonResult = JSONObject.parseObject(result2);
            JSONObject data = jsonResult.getJSONObject("data");
            JSONArray jsonArray = data.getJSONArray("list");
            for (int i = 0; i < 20; i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);

                if(idList.contains(jsonObject.getString("uid"))) {
                    continue;
                }
                idList.add(jsonObject.getString("uid"));
                WSocketTwo wSocketTwo = new WSocketTwo();
                wSocketTwo.setGatewayId(jsonObject.getString("plug_gateway_uid"));
                wSocketTwo.setFirmId(jsonObject.getString("suid"));
                wSocketTwo.setNodeIndex(jsonObject.getInteger("node_index"));
                wSocketTwo.setPlugId(jsonObject.getString("uid"));
                wSocketTwo.setStationId(jsonObject.getString("station_id"));

                list.add(wSocketTwo);
            }

            System.out.println("数量：" + idList.size());
            System.out.println("页码：" + page);

            this.saveBatch(list);

        } catch (Exception e) {
            e.printStackTrace ( );
        }

    }

    @Override
    public void heartbeat(JSONObject object) {
        // TODO 插座心跳
        log.info("插座心跳：{}", object);
    }

    @Override
    public void chargeEnd(JSONObject object) {

        log.info("充电结束上报：{}", object);

        JSONObject data = object.getJSONObject("data");
        String transactionId = data.getString("transaction_id");
        // 0 表示未充电，1 表示充电，2 表示充满自停 ，3金额用完（时间到）
        Integer chargeStatus = data.getInteger("charge_status");

        WMemberChargeRecord chargeRecord = memberChargeRecordService.getOne(new LambdaQueryWrapper<WMemberChargeRecord>()
                .eq(WMemberChargeRecord::getTransactionId, transactionId));
        if(chargeStatus == 1 || chargeStatus == 2) {
            memberChargeRecordService.updateWMemberChargeRecordById(chargeRecord);
        } else if(chargeStatus == 0){
            chargeRecord.setState(3);
            chargeRecord.setAmount(0D);
            chargeRecord.setTotalDuration(0L);
            chargeRecord.setEndTime(new Date());
        }

    }

    @Override
    public void powerEnd(JSONObject object) {

        // TODO 按功率充电结束上报
        log.info("按功率充电结束上报：{}", object);
    }

    @Override
    public void swipeBegin(JSONObject object) {
        // TODO NFC刷卡充电开始上报
        log.info("NFC刷卡充电开始上报：{}", object);
    }

    @Override
    public void swipeEnd(JSONObject object) {

        // TODO NFC刷卡充电结束上报
        log.info("NFC刷卡充电结束上报：{}", object);
    }

    @Override
    public void gatewayHeartbeat(JSONObject object) {

        // TODO 网关心跳上报
        log.info("网关心跳上报：{}", object);
    }

    @Override
    public void swipeWallet(JSONObject object) {

        // TODO NFC刷卡查余额请求
        log.info("NFC刷卡查余额请求：{}", object);
    }

    @Override
    public void common(JSONObject object) {
        String type = object.getString("type");
        if(type.equals(ReceiveTypeEnum.EVENT_PLUG_STATUS_REPORT.getReceiveTypeName())){
            this.heartbeat(object);
        } else if(type.equals(ReceiveTypeEnum.EVENT_CHARGE_FINISHED.getReceiveTypeName())){
            this.chargeEnd(object);
        } else if(type.equals(ReceiveTypeEnum.EVENT_CHARGE_FINISHED_3.getReceiveTypeName())){
            this.powerEnd(object);
        } else if(type.equals(ReceiveTypeEnum.EVENT_NFC_CHARGE_STARTED.getReceiveTypeName())){
            this.swipeBegin(object);
        } else if(type.equals(ReceiveTypeEnum.EVENT_NFC_CHARGE_FINISHED.getReceiveTypeName())){
            this.swipeEnd(object);
        } else if(type.equals(ReceiveTypeEnum.EVENT_GATEWAY_HEARTBEAT.getReceiveTypeName())){
            this.gatewayHeartbeat(object);
        } else if(type.equals(ReceiveTypeEnum.EVENT_NFC_BALANCE_QUERY.getReceiveTypeName())){
            this.swipeWallet(object);
        } else {

        }
    }

    String[] arr = {
            "351041902198",
            "351041901515",
            "351041900533",
            "351041900583",
            "351041901392",
            "351041901900",
            "351041900441",
            "351041901908",
            "351041900428",
            "351041900500",
            "351041900537",
            "351041900444",
            "350082800881",
            "350082801275",
            "351041901596",
            "351041901597",
            "351041901619",
            "351041902725",
            "351041901939",
            "351041902002",
            "351041901988",
            "351041901560",
            "351041902515",
            "351041901656",
            "351041902498",
            "351041901651",
            "351041901516",
            "351041901833",
            "351041900217",
            "351041901452",
            "351041901657",
            "351041901505",
            "351041901465",
            "351041900540",
            "351041900450",
            "351041901358",
            "353012904858",
            "350082800762",
            "353012904743",
            "353012902952",
            "353012902844",
            "350071404153",
            "352021409882",
            "352021409951",
            "352021405806",
            "352021409847",
            "351041900724",
            "351041900429",
            "351041901364",
            "351041900017",
            "351041900363",
            "351041900456",
            "351011800072",
            "350071401252",
            "350071404200",
            "350082800452",
            "350082800847",
            "350082801635",
            "350082800063",
            "351041902677",
            "351041900736",
            "351041901424",
            "353052801778",
            "353012902471",
            "353012902499",
            "353012902491",
            "353012903329",
            "351041902491",
            "353012902243",
            "352021409874",
            "352021409529",
            "352021409864",
            "352021409536",
            "352021409600",
            "352021409886",
            "352021409858",
            "352021409512",
            "352021409802",
            "352021409828",
            "352021409909",
            "352021409829",
            "352021409896",
            "352021409873",
            "352021409525",
            "352021409950",
            "352021409889",
            "352021409508",
            "352021409867",
            "351041901523",
            "351041901776",
            "351041902798",
            "351041901877",
            "351041901891",
            "351011801125",
            "351041901825",
            "351041901693",
            "351041901784",
            "351041901575",
            "351041901561",
            "352021409821",
            "352021409959",
            "352021409523",
            "352021409971",
            "351041900710",
            "351041901684",
            "351041901478",
            "351041901697",
            "351041900483",
            "351041901604",
            "351041901588",
            "351041902678",
            "351041900452",
            "351041900971",
            "351041900525",
            "351041900545",
            "351041900729",
            "351041902487",
            "351041902339",
            "351041902182",
            "351041902341",
            "351041900730",
            "351041901460",
            "351041900423",
            "351041901580",
            "351041901399",
            "351041902337",
            "351041902679",
            "351041902481",
            "351041900495",
            "351041902511",
            "351041902191",
            "351041902343",
            "351041902199",
            "351041902533",
            "351041902802",
            "351041901952",
            "351041901998",
            "351041901955",
            "351041901948",
            "351041902817",
            "351041901937",
            "351041901864",
            "351041900721",
            "351041901951",
            "351041902003",
            "351041901977",
            "351041901949",
            "351041902017",
            "351041901993",
            "351041900768",
            "351041902833",
            "351041901927",
            "351041901909",
            "351041902801",
            "351041900205",
            "351041900046",
            "351041901666",
            "351041901518",
            "351041901658",
            "351041901819",
            "351041900249",
            "351041901663",
            "351041900042",
            "351041901838",
            "351041901659",
            "351041901675",
            "351041901835",
            "351041901667",
            "351041901654",
            "351041901831",
            "351041900410",
            "351041900421",
            "351041900455",
            "350082801327",
            "351041900432",
            "351011800190",
            "351041900482",
            "351041900066",
            "351041900419",
            "350082801641",
            "351011801283",
            "351041900436",
            "351041900509",
            "351041900478",
            "351041900570",
            "351041902205",
            "351041902500",
            "351041902342",
            "351041900747",
            "351041900449",
            "351041900425",
            "351041900008",
            "350082801677",
            "351041902586",
            "351041902512",
            "351041900451",
            "351041900409",
            "351041900458",
            "351041900715",
            "350082800003",
            "350082801531",
            "350082800084",
            "350082802002",
            "350082800772",
            "351092600360",
            "351041900565",
            "351041901599",
            "351041901794",
            "351041901372",
            "351011800507",
            "351041901837",
            "351041901829",
            "351041901834",
            "351041901828",
            "351041901652",
            "351041900194",
            "351041901950",
            "351041901938",
            "351041900348",
            "351041900007",
            "351041902197",
            "351041901914",
            "351041901826",
            "351041901981",
            "351041901991",
            "351011801093",
            "351011802453",
            "351011800501",
            "351041902519",
            "351041900727",
            "351041900699",
            "351041900594",
            "351041900702",
            "351041902698",
            "351041902701",
            "351041901910",
            "351041901976",
            "351041900481",
            "351041900018",
            "351041902712",
            "351041901911",
            "351041900617",
            "351041900964",
            "351041900636",
            "351041900469",
            "351041900602",
            "351041900587",
            "351041900643",
            "351041900136",
            "351041900372",
            "351041900976",
            "351041900959",
            "351041900124",
            "351041902800",
            "351041902359",
            "351041902722",
            "351041902717",
            "351041902371",
            "351041902733",
            "351041902742",
            "351041902740",
            "351041900588",
            "351041902703",
            "351041900863",
            "351041900649",
            "351041902001",
            "351041902707",
            "351041902709",
            "351041902358",
            "351041902797",
            "351041902718",
            "351041902739",
            "351041902000",
            "351041902705",
            "351041902344",
            "351041902710",
            "351041902716",
            "351041901319",
            "351041901427",
            "351041901763",
            "351041901567",
            "351041901323",
            "351041901455",
            "351041901474",
            "351041901569",
            "351041901488",
            "351041901346",
            "351041901461",
            "351041901315",
            "351041900109",
            "351041900969",
            "351041900586",
            "351041901594",
            "351041901536",
            "351041901715",
            "351041900555",
            "351041901325",
            "351041901475",
            "351041901556",
            "351041901349",
            "351041901528",
            "351041900846",
            "351041900614",
            "351041902186",
            "351041900962",
            "351041900577",
            "351041900979",
            "353012900140",
            "353012902692",
            "353012902638",
            "353012904860",
            "353012902931",
            "353012901985",
            "353012900443",
            "353012902681",
            "353012901188",
            "353012902588",
            "353012902680",
            "353012902868",
            "353012902982",
            "353012902981",
            "353012904873",
            "353012902693",
            "353012900160",
            "353012901984",
            "353012902503",
            "353012904855",
            "351041901907",
            "351041901989",
            "351041901573",
            "351041901670",
            "351041901892",
            "351041901603",
            "351041901792",
            "351041901614",
            "351041901740",
            "351041902022",
            "351041901982",
            "351041901901",
            "351041902010",
            "351041901983",
            "351041900550",
            "351041901734",
            "351041901431",
            "351041901373",
            "351041901627",
            "351041901541",
            "351041901787",
            "351041901688",
            "351041901689",
            "351041901600",
            "351041901899",
            "351041901987",
            "351041901615",
            "351041900521",
            "351041902015",
            "351041901931",
            "351041901957",
            "351041901934",
            "351041901553",
            "351041902007",
            "351041901706",
            "351041900144",
            "351041900226",
            "351041900228",
            "351041901476",
            "351041902496",
            "351041901449",
            "351041902484",
            "351041902452",
            "351041902183",
            "351041902497",
            "351041900680",
            "351041901330",
            "351041900240",
            "351041900259",
            "351041900033",
            "351041900030",
            "351041902643",
            "351041900233",
            "351041900254",
            "351041900133",
            "351041900238",
            "351041900031",
            "351041900524",
            "351041900560",
            "351041901495",
            "351092600907",
            "352102200570",
            "351041901487",
            "351041901858",
            "351041900528",
            "351041901885",
            "351041901385",
            "351041901413",
            "351041901441",
            "351041901729",
            "351041901906",
            "351041901312",
            "351041901472",
            "351041901886",
            "353012904776",
            "353012902660",
            "353012903330",
            "353012901605",
            "353012900739",
            "353012902501",
            "353012902686",
            "353012903704",
            "353012904144",
            "353012902958",
            "353012902496",
            "353012902990",
            "353012902209",
            "353012902674",
            "353012904786",
            "353012902502",
            "353012904710",
            "353012904721",
            "353012904744",
            "353012902145",
            "353012902340",
            "353012902495",
            "353012902420",
            "353012900163",
            "353012902497",
            "353012902121",
            "353012902532",
            "351041901538",
            "350082800544",
            "351041901583",
            "351041901786",
            "351041901582",
            "351041901793",
            "351041901765",
            "351041901696",
            "351041901386",
            "351041901382",
            "351041901598",
            "351041901393",
            "351041901537",
            "351041901343",
            "351041901721",
            "351041901412",
            "351041901468",
            "351041901453",
            "351041901367",
            "351041900539",
            "351041901717",
            "351041901723",
            "351041901428",
            "351041901795",
            "351041901780",
            "351041902539",
            "351041900743",
            "351041902493",
            "351041902683",
            "351041900465",
            "351041900725",
            "351041900239",
            "351041901769",
            "351041902691",
            "351041902542",
            "351041902693",
            "351041902680",
            "351041900004",
            "351041900571",
            "351041901766",
            "351041900400",
            "351041900467",
            "351041902687",
            "351041902522",
            "351041902193",
            "351041901444",
            "351041901333",
            "351041902681",
            "351041902697",
            "351041902583",
            "351041902744",
            "351041902587",
            "351041902692",
            "351041902748",
            "351041902682",
            "351041902689",
            "351041902634",
            "351041901467",
            "351041901377",
            "351041901341",
            "351041902369",
            "351041902535",
            "351041901419",
            "351041901547",
            "351041901335",
            "351041901353",
            "351041901368",
            "351041901710",
            "351041901337",
            "351041900448",
            "351041901356",
            "351041901463",
            "351041901310",
            "351041901362",
            "351041901339",
            "351041901471",
            "351041902488",
            "353012904865",
            "353012902656",
            "353012902587",
            "452120201091",
            "353012904730",
            "353012902754",
            "353012902639",
            "353012902090",
            "353012902504",
            "353012902698",
            "353012904869",
            "353012904935",
            "353012904646",
            "353012905005",
            "353012902561",
            "353012902560",
            "353012904587",
            "353012904731",
            "353012901604",
            "353012902148",
            "353012902672",
            "353012902932",
            "353012902694",
            "353012902541",
            "353012904879",
            "452120200846",
            "353012901603",
            "353012902700",
            "353012904881",
            "353012902687",
            "353012902842",
            "353012900442",
            "353012904738",
            "353012902682",
            "353012904880",
            "353012902920",
            "353012902669",
            "353012904740",
            "353012904868",
            "353012903007",
            "353012903487",
            "353012902467",
            "353012901877",
            "353012902336",
            "353012902987",
            "353012902670",
            "350071404156",
            "350082801655",
            "350082801513",
            "350082800720",
            "350082800850",
            "351011801074",
            "351041900013",
            "351041900733",
            "351041900484",
            "351011800363",
            "351011801672",
            "351011800368",
            "351011800146",
            "351011801128",
            "351011801259",
            "351011801120",
            "351041900517",
            "351041900564",
            "351041901602",
            "351041901735",
            "351041901737",
            "351041902812",
            "351041901634",
            "351041901613",
            "351041901396",
            "351041901644",
            "351041901997",
            "351041901632",
            "351041901552",
            "351041901733",
            "351011801158",
            "351011801609",
            "351011801127",
            "351011800902",
            "351011801251",
            "351011801179",
            "351011800386",
            "351011800252",
            "351011800388",
            "351011800264",
            "351011801122",
            "350082800784",
            "350082800745",
            "350082800869",
            "351011801284",
            "350082800320",
            "351011800073",
            "351011800135",
            "351011801110",
            "351011800994",
            "351011800305",
            "352021409887",
            "352021409879",
            "352021409898",
            "352021409516",
            "352021409965",
            "352021405796",
            "352021409840",
            "352021409911",
            "352021409521",
            "352021405794",
            "352021409870",
            "352021405829",
            "352021409930",
            "352021400406",
            "352021409807",
            "352021405805",
            "352021409511",
            "352021409944",
            "352021409892",
            "352021409859",
            "352021409837",
            "352021409899",
            "352021409522",
            "352021409843",
            "352021405850",
            "352021409960",
            "352021409955",
            "352021409809",
            "352021409816",
            "352021409831",
            "352021400272",
            "352021409808",
            "352021409855",
            "352021404181",
            "353012904980",
            "351041901925",
            "351041901921",
            "351041901879",
            "351041901893",
            "351041901895",
            "351041902024",
            "351041901898",
            "351041901999",
            "351041902021",
            "351041901990",
            "351041901915",
            "353012903053",
            "353012902759",
            "353012902860",
            "353012902283",
            "353012902088",
            "353012902085",
            "353012902100",
            "353012902991",
            "353012902659",
            "353012902861",
            "353012902657",
            "353012902493",
            "353012902758",
            "353012902760",
            "353012900162",
            "353012902492",
            "353012902134",
            "353012902083",
            "353012901782",
            "353012902986",
            "353012902494",
            "353012902086",
            "353012902093",
            "353012902087",
            "353012902555",
            "353012902486",
            "353012902084",
            "353012902677",
            "353012902578",
            "353012902663",
            "353012902097",
            "353012902098",
            "353012902498",
            "353012902505",
            "353012902135",
            "353012902678",
            "353012902473",
            "351041900019",
            "351041900418",
            "351041900690",
            "351041900489",
            "351041900285",
            "351041900493",
            "351041900453",
            "351041900508",
            "351041900512",
            "351041900518",
            "350082800629",
            "350082801564",
            "350082800773",
            "350082800821",
            "350082801139",
            "350082800718",
            "350082801027",
            "350082800550",
            "350082801131",
            "351041900928",
            "351041900982",
            "351041901338",
            "351041900156",
            "351041900981",
            "351041900120",
            "351041900927",
            "351041902584",
            "351041902495",
            "351041902640",
            "351041902315",
            "351041900490",
            "351041902670",
            "351041902667",
            "351041902336",
            "350082801260",
            "350082800458",
            "350082801258",
            "351011800385",
            "350082800883",
            "351011802864",
            "351011801094",
            "351011800309",
            "351041902695",
            "351041902644",
            "351041900099",
            "351041900039",
            "351041901003",
            "351041900067",
            "351041900028",
            "351041900036",
            "351041900247",
            "351041900146",
            "351041900151",
            "351041900201",
    };
}
